home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / glibc108.zip / glibc108 / math / math.h < prev    next >
C/C++ Source or Header  |  1994-01-25  |  10KB  |  293 lines

  1. /* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
  2. This file is part of the GNU C Library.
  3.  
  4. The GNU C Library is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU Library General Public License as
  6. published by the Free Software Foundation; either version 2 of the
  7. License, or (at your option) any later version.
  8.  
  9. The GNU C Library is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. Library General Public License for more details.
  13.  
  14. You should have received a copy of the GNU Library General Public
  15. License along with the GNU C Library; see the file COPYING.LIB.  If
  16. not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
  17. Cambridge, MA 02139, USA.  */
  18.  
  19. /*
  20.  *    ANSI Standard: 4.5 MATHEMATICS    <math.h>
  21.  */
  22.  
  23. #ifndef    _MATH_H
  24.  
  25. #define    _MATH_H    1
  26. #include <features.h>
  27.  
  28. __BEGIN_DECLS
  29.  
  30. #define    __need_Emath
  31. #include <errno.h>
  32.  
  33. /* Get machine-dependent HUGE_VAL value (returned on overflow).  */
  34. #include <huge_val.h>
  35.  
  36. /* Get machine-dependent NAN value (returned for some domain errors).  */
  37. #ifdef     __USE_GNU
  38. #include <nan.h>
  39. #endif
  40.  
  41.  
  42. /* Trigonometric functions.  */
  43.  
  44. /* Arc cosine of X.  */
  45. extern __CONSTVALUE double acos __P ((double __x));
  46. /* Arc sine of X.  */
  47. extern __CONSTVALUE double asin __P ((double __x));
  48. /* Arc tangent of X.  */
  49. extern __CONSTVALUE double atan __P ((double __x));
  50. /* Arc tangent of Y/X.  */
  51. extern __CONSTVALUE double atan2 __P ((double __y, double __x));
  52.  
  53. /* Cosine of X.  */
  54. extern __CONSTVALUE double cos __P ((double __x));
  55. /* Sine of X.  */
  56. extern __CONSTVALUE double sin __P ((double __x));
  57. /* Tangent of X.  */
  58. extern __CONSTVALUE double tan __P ((double __x));
  59.  
  60.  
  61. /* Hyperbolic functions.  */
  62.  
  63. /* Hyperbolic cosine of X.  */
  64. extern __CONSTVALUE double cosh __P ((double __x));
  65. /* Hyperbolic sine of X.  */
  66. extern __CONSTVALUE double sinh __P ((double __x));
  67. /* Hyperbolic tangent of X.  */
  68. extern __CONSTVALUE double tanh __P ((double __x));
  69.  
  70. #ifdef    __USE_MISC
  71. /* Hyperbolic arc cosine of X.  */
  72. extern __CONSTVALUE double acosh __P ((double __x));
  73. /* Hyperbolic arc sine of X.  */
  74. extern __CONSTVALUE double asinh __P ((double __x));
  75. /* Hyperbolic arc tangent of X.  */
  76. extern __CONSTVALUE double atanh __P ((double __x));
  77. #endif
  78.  
  79. /* Exponential and logarithmic functions.  */
  80.  
  81. /* Exponentional function of X.  */
  82. extern __CONSTVALUE double exp __P ((double __x));
  83.  
  84. /* Break VALUE into a normalized fraction and an integral power of 2.  */
  85. extern double frexp __P ((double __value, int *__exp));
  86.  
  87. /* X times (two to the EXP power).  */
  88. extern __CONSTVALUE double ldexp __P ((double __x, int __exp));
  89.  
  90. /* Natural logarithm of X.  */
  91. extern __CONSTVALUE double log __P ((double __x));
  92.  
  93. /* Base-ten logarithm of X.  */
  94. extern __CONSTVALUE double log10 __P ((double __x));
  95.  
  96. #ifdef    __USE_MISC
  97. /* Return exp(X) - 1.  */
  98. extern __CONSTVALUE double __expm1 __P ((double __x));
  99. extern __CONSTVALUE double expm1 __P ((double __x));
  100.  
  101. /* Return log(1 + X).  */
  102. extern __CONSTVALUE double log1p __P ((double __x));
  103. #endif
  104.  
  105. /* Break VALUE into integral and fractional parts.  */
  106. extern double modf __P ((double __value, double *__iptr));
  107.  
  108.  
  109. /* Power functions.  */
  110.  
  111. /* Return X to the Y power.  */
  112. extern __CONSTVALUE double pow __P ((double __x, double __y));
  113.  
  114. /* Return the square root of X.  */
  115. extern __CONSTVALUE double sqrt __P ((double __x));
  116.  
  117. #ifdef    __USE_MISC
  118. /* Return the cube root of X.  */
  119. extern __CONSTVALUE double cbrt __P ((double __x));
  120. #endif
  121.  
  122.  
  123. /* Nearest integer, absolute value, and remainder functions.  */
  124.  
  125. /* Smallest integral value not less than X.  */
  126. extern __CONSTVALUE double ceil __P ((double __x));
  127.  
  128. /* Absolute value of X.  */
  129. extern __CONSTVALUE double fabs __P ((double __x));
  130.  
  131. /* Largest integer not greater than X.  */
  132. extern __CONSTVALUE double floor __P ((double __x));
  133.  
  134. /* Floating-point modulo remainder of X/Y.  */
  135. extern __CONSTVALUE double fmod __P ((double __x, double __y));
  136.  
  137.  
  138. /* Return 0 if VALUE is finite or NaN, +1 if it
  139.    is +Infinity, -1 if it is -Infinity.  */
  140. extern __CONSTVALUE int __isinf __P ((double __value));
  141.  
  142. /* Return nonzero if VALUE is not a number.  */
  143. extern __CONSTVALUE int __isnan __P ((double __value));
  144.  
  145. /* Return nonzero if VALUE is finite and not NaN.  */
  146. extern __CONSTVALUE int __finite __P ((double __value));
  147. #ifdef    __OPTIMIZE__
  148. #define    __finite(value)    (!__isinf(value))
  149. #endif
  150.  
  151. /* Deal with an infinite or NaN result.
  152.    If ERROR is ERANGE, result is +Inf;
  153.    if ERROR is - ERANGE, result is -Inf;
  154.    otherwise result is NaN.
  155.    This will set `errno' to either ERANGE or EDOM,
  156.    and may return an infinity or NaN, or may do something else.  */
  157. extern double __infnan __P ((int __error));
  158.  
  159. /* Return X with its signed changed to Y's.  */
  160. extern __CONSTVALUE double __copysign __P ((double __x, double __y));
  161.  
  162. /* Return X times (2 to the Nth power).  */
  163. extern __CONSTVALUE double __scalb __P ((double __x, int __n));
  164.  
  165. #ifdef    __OPTIMIZE__
  166. #define    __scalb(x, n)    ldexp ((x), (n))
  167. #endif
  168.  
  169. /* Return the remainder of X/Y.  */
  170. extern __CONSTVALUE double __drem __P ((double __x, double __y));
  171.  
  172. /* Return the base 2 signed integral exponent of X.  */
  173. extern __CONSTVALUE double __logb __P ((double __x));
  174.  
  175. #ifdef    __USE_MISC
  176.  
  177. /* Return the integer nearest X in the direction of the
  178.    prevailing rounding mode.  */
  179. extern __CONSTVALUE double __rint __P ((double __x));
  180. extern __CONSTVALUE double rint __P ((double __x));
  181.  
  182. /* Return `sqrt(X*X + Y*Y)'.  */
  183. extern __CONSTVALUE double hypot __P ((double __x, double __y));
  184.  
  185. struct __cabs_complex
  186. {
  187.   double __x, __y;
  188. };
  189.  
  190. /* Return `sqrt(X*X + Y*Y)'.  */
  191. extern __CONSTVALUE double cabs __P ((struct __cabs_complex));
  192.  
  193. extern __CONSTVALUE int isinf __P ((double __value));
  194. extern __CONSTVALUE int isnan __P ((double __value));
  195. extern __CONSTVALUE int finite __P ((double __value));
  196. extern __CONSTVALUE double infnan __P ((int __error));
  197. extern __CONSTVALUE double copysign __P ((double __x, double __y));
  198. extern __CONSTVALUE double scalb __P ((double __x, int __n));
  199. extern __CONSTVALUE double drem __P ((double __x, double __y));
  200. extern __CONSTVALUE double logb __P ((double __x));
  201.  
  202. #ifdef    __OPTIMIZE__
  203. #define    isinf(value)    __isinf(value)
  204. #define    isnan(value)    __isnan(value)
  205. #define    infnan(error)    __infnan(error)
  206. #define    finite(value)    __finite(value)
  207. #define    copysign(x, y)    __copysign((x), (y))
  208. #define    scalb(x, n)    __scalb((x), (n))
  209. #define    drem(x, y)    __drem((x), (y))
  210. #define    logb(x)        __logb(x)
  211. #endif /* Optimizing.  */
  212.  
  213. #endif /* Use misc.  */
  214.  
  215.  
  216. #if 0
  217. /* The "Future Library Directions" section of the
  218.    ANSI Standard reserves these as `float' and
  219.    `long double' versions of the above functions.  */
  220.  
  221. extern __CONSTVALUE float acosf __P ((float __x));
  222. extern __CONSTVALUE float asinf __P ((float __x));
  223. extern __CONSTVALUE float atanf __P ((float __x));
  224. extern __CONSTVALUE float atan2f __P ((float __y, float __x));
  225. extern __CONSTVALUE float cosf __P ((float __x));
  226. extern __CONSTVALUE float sinf __P ((float __x));
  227. extern __CONSTVALUE float tanf __P ((float __x));
  228. extern __CONSTVALUE float coshf __P ((float __x));
  229. extern __CONSTVALUE float sinhf __P ((float __x));
  230. extern __CONSTVALUE float tanhf __P ((float __x));
  231. extern __CONSTVALUE float expf __P ((float __x));
  232. extern float frexpf __P ((float __value, int *__exp));
  233. extern __CONSTVALUE float ldexpf __P ((float __x, int __exp));
  234. extern __CONSTVALUE float logf __P ((float __x));
  235. extern __CONSTVALUE float log10f __P ((float __x));
  236. extern float modff __P ((float __value, float *__iptr));
  237. extern __CONSTVALUE float powf __P ((float __x, float __y));
  238. extern __CONSTVALUE float sqrtf __P ((float __x));
  239. extern __CONSTVALUE float ceilf __P ((float __x));
  240. extern __CONSTVALUE float fabsf __P ((float __x));
  241. extern __CONSTVALUE float floorf __P ((float __x));
  242. extern __CONSTVALUE float fmodf __P ((float __x, float __y));
  243.  
  244. extern __CONSTVALUE __long_double_t acosl __P ((__long_double_t __x));
  245. extern __CONSTVALUE __long_double_t asinl __P ((__long_double_t __x));
  246. extern __CONSTVALUE __long_double_t atanl __P ((__long_double_t __x));
  247. extern __CONSTVALUE __long_double_t atan2l __P ((__long_double_t __y, __long_double_t __x));
  248. extern __CONSTVALUE __long_double_t cosl __P ((__long_double_t __x));
  249. extern __CONSTVALUE __long_double_t sinl __P ((__long_double_t __x));
  250. extern __CONSTVALUE __long_double_t tanl __P ((__long_double_t __x));
  251. extern __CONSTVALUE __long_double_t coshl __P ((__long_double_t __x));
  252. extern __CONSTVALUE __long_double_t sinhl __P ((__long_double_t __x));
  253. extern __CONSTVALUE __long_double_t tanhl __P ((__long_double_t __x));
  254. extern __CONSTVALUE __long_double_t expl __P ((__long_double_t __x));
  255. extern __long_double_t frexpl __P ((__long_double_t __value, int *__exp));
  256. extern __CONSTVALUE __long_double_t ldexpl __P ((__long_double_t __x, int __exp));
  257. extern __CONSTVALUE __long_double_t logl __P ((__long_double_t __x));
  258. extern __CONSTVALUE __long_double_t log10l __P ((__long_double_t __x));
  259. extern __long_double_t modfl __P ((__long_double_t __value, __long_double_t * __ip));
  260. extern __CONSTVALUE __long_double_t powl __P ((__long_double_t __x, __long_double_t __y));
  261. extern __CONSTVALUE __long_double_t sqrtl __P ((__long_double_t __x));
  262. extern __CONSTVALUE __long_double_t ceill __P ((__long_double_t __x));
  263. extern __CONSTVALUE __long_double_t fabsl __P ((__long_double_t __x));
  264. extern __CONSTVALUE __long_double_t floorl __P ((__long_double_t __x));
  265. extern __CONSTVALUE __long_double_t fmodl __P ((__long_double_t __x, __long_double_t __y));
  266. #endif /* 0 */
  267.  
  268. /* Get machine-dependent inline versions (if there are any).  */
  269. #include <__math.h>
  270.  
  271. __END_DECLS
  272.  
  273.  
  274. #ifdef __USE_BSD
  275. /* Some useful constants.  */
  276. #define    M_E        2.7182818284590452354    /* e */
  277. #define    M_LOG2E        1.4426950408889634074    /* log 2e */
  278. #define    M_LOG10E    0.43429448190325182765    /* log 10e */
  279. #define    M_LN2        0.69314718055994530942    /* log e2 */
  280. #define    M_LN10        2.30258509299404568402    /* log e10 */
  281. #define    M_PI        3.14159265358979323846    /* pi */
  282. #define    M_PI_2        1.57079632679489661923    /* pi/2 */
  283. #define    M_PI_4        0.78539816339744830962    /* pi/4 */
  284. #define    M_1_PI        0.31830988618379067154    /* 1/pi */
  285. #define    M_2_PI        0.63661977236758134308    /* 2/pi */
  286. #define    M_2_SQRTPI    1.12837916709551257390    /* 2/sqrt(pi) */
  287. #define    M_SQRT2        1.41421356237309504880    /* sqrt(2) */
  288. #define    M_SQRT1_2    0.70710678118654752440    /* 1/sqrt(2) */
  289. #endif
  290.  
  291.  
  292. #endif /* math.h  */
  293.